﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Collections;
//using NLite.Collections;

//namespace NLite.Data
//{
//    public class EntityState
//    {
//        internal bool isDirty;
//        internal bool isLoaded;
//        internal bool isNew = true;

//        internal void MarkClean()
//        {
//            this.isDirty = false;
//        }

//        internal void MarkDirty()
//        {
//            this.isDirty = true;
//        }

//        internal void MarkLoaded()
//        {
//            this.isLoaded = true;
//            this.isNew = false;
//            this.isDirty = false;
//        }

//        internal void MarkNew()
//        {
//            this.isNew = true;
//            this.isDirty = false;
//            this.isLoaded = false;
//        }

//        internal void MarkOld()
//        {
//            this.isNew = false;
//        }

//        public bool IsDirty
//        {
//            get
//            {
//                return this.isDirty;
//            }
//        }

//        public bool IsLoaded
//        {
//            get
//            {
//                return this.isLoaded;
//            }
//        }

//        public bool IsNew
//        {
//            get
//            {
//                return this.isNew;
//            }
//        }
//    }

//    [Serializable]
//    public class Entity : MarshalByRefObject
//    {
//        internal IDictionary dirtyColumnSettings;
//        internal EntityState entityState;
//        internal PropertySet settings;
//        protected string viewName;

//        public Entity()
//        {
//            this.entityState = new EntityState();
//            this.settings = new PropertySet();
//            this.dirtyColumnSettings = Hashtable.Synchronized(new Hashtable());
//            this.viewName = base.GetType().Name;
//        }

//        public Entity(string viewName)
//        {
//            this.entityState = new EntityState();
//            this.settings = new PropertySet();
//            this.dirtyColumnSettings = Hashtable.Synchronized(new Hashtable());
//            this.viewName = viewName;
//        }

//        public virtual object GetValue(string columnName)
//        {
//            return this.settings[columnName];
//        }

//        public string Inspect()
//        {
//            return this.Inspect(false);
//        }

//        public string Inspect(bool useHtml)
//        {
//            StringBuilder builder = new StringBuilder();
//            if (useHtml)
//            {
//                builder.Append("<table><tr><td colspan=2><h3>" + this.viewName + " Inspection</h3></td></tr>");
//                foreach (string str2 in this.settings.Keys)
//                {
//                    object obj2 = this.settings[str2];
//                    string str3 = (obj2 == null) ? "NULL" : obj2.ToString();
//                    builder.Append("<tr><td><b>" + str2 + "</b></td><td>" + str3 + "</td></tr>");
//                }
//                builder.Append("</table>");
//                return builder.ToString();
//            }
//            builder.Append("#################" + this.viewName + " Inspection ####################\r\n");
//            foreach (string str4 in this.settings.Keys)
//            {
//                object obj3 = this.settings[str4];
//                builder.Append(str4 + ": " + ((obj3 == null) ? "NULL" : obj3.ToString()) + "\r\n");
//            }
//            builder.Append("#############################################################################\r\n");
//            return builder.ToString();
//        }

//        public string InspectDirtyColumn(bool useHtml)
//        {
//            StringBuilder builder = new StringBuilder();
//            if (useHtml)
//            {
//                builder.Append("<table><tr><td colspan=2><h3>" + this.viewName + " Dirty Columns Inspection</h3></td></tr>");
//                foreach (string str2 in this.settings.Keys)
//                {
//                    string str3 = this.settings[str2].ToString();
//                    builder.Append("<tr><td><b>" + str2 + "</b></td><td>" + str3 + "</td></tr>");
//                }
//                builder.Append("</table>");
//                return builder.ToString();
//            }
//            builder.Append("#################" + this.viewName + "  Dirty Columns Inspection ####################\r\n");
//            foreach (string str4 in this.settings.Keys)
//            {
//                builder.Append(str4 + ": " + this.settings[str4].ToString() + "\r\n");
//            }
//            builder.Append("#############################################################################\r\n");
//            return builder.ToString();
//        }

//        public virtual void SetValue(string columnName, object oValue)
//        {
//            if (oValue != null)
//            {
//                this.entityState.MarkDirty();
//                this.settings[columnName] = oValue;
//                this.dirtyColumnSettings[columnName] = oValue;
//            }
//        }

       
//        public override string ToString()
//        {
//            return this.Inspect();
//        }

//        public object this[string columnName]
//        {
//            get
//            {
//                return this.GetValue(columnName);
//            }
//            set
//            {
//                this.SetValue(columnName, value);
//            }
//        }

//        public PropertySet Settings
//        {
//            get
//            {
//                return this.settings;
//            }
//        }

//        public EntityState State
//        {
//            get
//            {
//                return this.entityState;
//            }
//        }

//        public string TableName
//        {
//            get
//            {
//                return this.viewName;
//            }
//        }
//    }
//}
